package com.party.notify.notifyPush.servce;

import com.party.core.model.activity.Activity;
import com.party.core.model.crowdfund.Project;
import com.party.core.model.gatherForm.GatherProject;
import com.party.core.model.gift.Gift;
import com.party.core.model.member.Member;
import com.party.core.model.member.MemberGroup;
import com.party.core.model.notify.TargetTemplate;
import com.party.core.model.order.OrderForm;

import java.io.File;
import java.util.HashMap;

/**
 * 消息统一推送接口
 * Created by wei.li
 *
 * @date 2017/4/18 0018
 * @time 16:45
 */
public interface INotifySendService {

    /**
     * 推送验证码
     * @param phone 手机号
     */
    void sendVerifyCode(String phone);

    /**
     * 购买成功推送
     * @param orderForm 订单
     * @param verifyCode 验证码
     */
    void senGoodsBuy(OrderForm orderForm, String verifyCode);

    /**
     * 报名成功推送
     *
     * @param orderForm  订单
     * @param verifyCode 验证码
     * @param activity   活动
     * @param orgMember  发布者
     */
    void sendActivityApply(OrderForm orderForm, String verifyCode, Activity activity, MemberGroup orgMember);

    /**
     * 课程报名成功推送
     * @param orderForm 订单
     * @param verifyCode 验证码
     * @param activity 课程活动
     */
    void sendCourseApply(OrderForm orderForm, String verifyCode, Activity activity);

    /**
     * 商品退款推送
     * @param orderForm 订单
     */
    void sendGoodsRefund(OrderForm orderForm);

    /**
     * 活动退款推送
     * @param orderForm 订单
     */
    void sendActivityRefund(OrderForm orderForm);

    /**
     * 众筹成功推送
     *
     * @param orderForm       订单
     * @param verifyCode      验证码
     * @param crowdfundMember 众筹者
     * @param orgMember       发布者
     */
    void sendCorowdfund(OrderForm orderForm, String verifyCode, Member crowdfundMember, MemberGroup orgMember);

    /**
     * 免费活动审核推送
     * @param orderForm 订单
     */
    void sendFreeCheack(OrderForm orderForm);

    /**
     * 付费活动审核
     * @param orderForm 订单
     */
    void sendPayCheack(OrderForm orderForm);

    /**
     * 活动审核通过
     * @param activity 活动
     * @param orderId 订单号
     * @param phone 电话
     * @param memberId 会员编号
     * @param orderStatus 订单状态
     */
    void sendApplyPass(Activity activity, String orderId, String phone, String memberId, Integer orderStatus);

    /**
     * 达人认证推送
     * @param memberId 会员编号
     */
    void sendExpertApprove(String memberId);

    /**
     * 达人取消推送
     * @param memberId 会员编号
     */
    void sendExpertCancel(String memberId);


    /**
     * 点赞推送
     * @param memberId 会员
     * @param author 作者
     * @param logo 标志
     * @param url 路径
     * @param content 内容
     * @param relId 关联编号
     */
    void sendLove(String memberId, Member author, String logo, String url, String content, String relId);

    /**
     * 关注推送
     * @param memberId 会员
     * @param author 作者
     * @param logo 标志
     * @param url 路径
     * @param content 内容
     * @param relId 关联编号
     */
    void sendFocus(String memberId, Member author, String logo, String url, String content, String relId);

    /**
     * 评论推送
     * @param memberId 会员
     * @param author 作者
     * @param logo 标志
     * @param url 路径
     * @param content 内容
     * @param relId 关联编号
     */
    void sendComment(String memberId, Member author, String logo, String url, String content, String relId);

    /**
     * 会员审核通过推送
     * @param member 会员
     */
    void sendMemberPass(Member member);

    /**
     * 会员审核拒绝推送
     * @param member 会员
     */
    void sendMemberRefuse(Member member);

    /**
     * 活动审核通过推送
     * @param title 题目
     * @param relId 关联编号
     * @param memberId 会员编号
     */
    void sendActivityPass(String title, String relId, String memberId);

    /**
     * 活动审核拒绝通过推送
     * @param title 题目
     * @param relId 关联编号
     * @param memberId 会员编号
     */
    void sendActivityRefuse(String title, String relId, String memberId);

    /**
     * 发送支持阶段提醒的推送
     * @param orderForm 订单编号
     * @param project 众筹项目
     * @param member 会员编号
     */
    void sendSupportStage(OrderForm orderForm, Project project, Member member);


    /**
     * 发送项目阶段提醒
     *
     * @param project         众筹
     * @param crowdfundMember 众筹者
     * @param percent         百分比
     * @param rankNo          排名
     * @param orgMember       发布者
     * @param activity        项目
     */
    void sendProjectStage(Project project, Member crowdfundMember, int percent, int rankNo, MemberGroup orgMember, Activity activity);

    /**
     * 发起众筹消息推送
     * @param project 众筹
     * @param member 会员编号
     */
    void sendLaunchProject(Project project, Member member);

    /**
     * 众筹收到支持消息推送
     *
     * @param orderForm       订单信息
     * @param supportMember   支持者
     * @param crowdfundMember 接受者
     * @param orgMember       发布者
     * @param projectId       众筹id
     */
    void sendAcceptSupport(OrderForm orderForm, Member supportMember, Member crowdfundMember, String projectId, MemberGroup orgMember);

    /**
     * 免费活动报名
     * @param activityId 活动ID
     * @param memberActId 活动报名ID
     * @param verifyCode 核销码
     */
    void sendActivityApplyFree(String activityId, String memberActId, String verifyCode);

    /**
     * 免费活动报名
     * @param activityId 活动ID
     * @param memberActId 活动报名ID
     * @param verifyCode 核销码
     */
    void sendCourseApplyFree(String activityId, String memberActId, String verifyCode);

    /**
     * 所有众筹手动推送
     */
    void sendAllCrowdfund();

    /**
     * 众筹成功推送
     */
    void sendSuccessCrowdfund();

    /**
     * 众筹中推送
     */
    void sendUnderwayCordfund();

    /**
     * 获取合作商名称
     * @param projectId 众筹编号
     * @param constant 内容
     */
    void getProjectPartner(String projectId, HashMap<String, Object> constant);

    /**
     * 推送所有众筹
     * @param targetId 目标编号
     * @param authorId 会员编号
     * @param targetTemplate 模板
     */
    boolean sendAllCrowdfund(String targetId, String authorId, TargetTemplate targetTemplate, String way);


    /**
     * 推送成功的众筹
     * @param targetId 目标编号
     * @param authorId 会员编号
     * @param targetTemplate 模板
     */
    boolean sendSuccessCrowdfund(String targetId, String authorId, TargetTemplate targetTemplate, String way);

    /**
     *  推送进行中的
     * @param targetId 目标编号
     * @param authorId 会员编号
     * @param targetTemplate 模板
     */
    boolean sendUnderwayCordfund(String targetId, String authorId, TargetTemplate targetTemplate, String way);
    
    /**
     * 表单填写成功推送
     */
    void sendSuccessForm(String telephone, GatherProject gatherProject);

    /**
     * 服务升级推送
     *
     * @param memberId 用户id
     * @param title    套餐标题
     * @param phone    手机号
     */
    void sendBuyLevel(String memberId, String title, String phone);

    /**
     * 预警
     * @param telephone 手机号
     * @param tableName 表名
     */
    void sendWarn(String telephone, String tableName);

    /**
     * 票券领取成功推送
     *
     * @param telephone  手机号
     * @param couponId   票券id
     * @param verifyCode 核销码
     * @param gift       礼包
     */
    void sendCouponOrder(String telephone, String couponId, String verifyCode, Gift gift);

    /**
     * 实物礼包领取推送
     *
     * @param telephone 手机号
     * @param gift      礼包
     */
    void sendGiftOrder(String telephone, Gift gift);

    /**
     * 提醒打卡
     * @param projectId 项目id
     * @param signCount 打卡人数
     * @param authorId 未打卡用户IDS
     */
    void notifySign(String projectId, Integer signCount, String authorId) throws Exception;

    /**
     * 打卡成功
     *
     * @param projectId 项目id
     * @param authorId  用户id
     * @param applyId   报名id
     */
    void signSuccess(String projectId, String authorId, String applyId);

    /**
     * 打卡排名通知
     *
     * @param projectId 项目id
     * @param authorId  用户id
     * @param rankNo    名次
     * @param stepNum   步数
     */
    void notifySignRank(String projectId, String authorId, Integer rankNo, Long stepNum);

    /**
     * 收到众筹评论推送
     * @param commentName 评论人名字
     * @param comment 评论内容
     * @param activityMemberId 众筹项目发起者
     * @param projectId 众筹id
     * @param authorId 发送给谁
     */
    void sendAcceptCrowfundComment(String commentName, String comment, String authorId, String activityMemberId, String projectId);


    /**
     * 发送微信公众号海报
     *
     * @param authorId            接受者
     * @param targetMemberId           目标商户
     * @param type            文件类型
     * @param file 文件
     */
     void postersSend(String authorId, String targetMemberId, String type, File file) throws Exception;

    /**
     * @param targetId       众筹项目/主题id
     * @param authorId       机构id
     * @param targetTemplate 模板
     * @param way            发送方式
     * @return void
     * @Author yifeng
     * @Description 多场活动的众筹主动推送
     * @Date 17:07 2019/3/22
     **/
     boolean multipleProjectSend(String targetId, String authorId, TargetTemplate targetTemplate, String way, String projectIds);


    /**
     * 发起众筹消息推送__多场
     * @param project 众筹
     * @param member 会员编号
     */
     void gradationSendLaunchProject(Project project, Member member);

    /**
     * 众筹成功发送__多场
     * @param orderForm 订单
     * @param project project
     * @param member 会员信息
     */
    void gradationSendCorowdfund(OrderForm orderForm, Project project, Member member);
}
